import type { Router, RouteLocationNormalized } from 'vue-router'
import { useAuthStore } from '@/stores/modules/auth'

export function setupRouterPermission(router: Router) {
  router.beforeEach(async (to: RouteLocationNormalized, from: RouteLocationNormalized, next) => {
    const authStore = useAuthStore()

    // 如果用户未登录且当前路由需要登录，则重定向到登录页
    if (!authStore.token && to.meta?.requiresAuth) {
      next({ name: 'login', query: { redirect: to.fullPath } })
      return
    }

    try {
      // 如果用户已登录但没有权限信息，先获取用户信息
      if (authStore.token && !authStore.permissions?.length) {
        await authStore.fetchCurrentUser()
      }
      // 如果路由的 meta.permissions 未配置，则该路由无需权限控制，直接放行
      if (!to.meta?.permissions) {
        next()
        return
      }

      // 获取路由所需权限
      const requiredPermissions = Array.isArray(to.meta.permissions)
        ? to.meta.permissions
        : [to.meta.permissions]

      // 获取用户权限
      const userPermissions = authStore.permissions || []

      // 检查用户是否拥有所需权限（满足其一即可）
      const hasPermission = requiredPermissions.some((permission) =>
        userPermissions.includes(permission),
      )

      if (hasPermission) {
        next()
      } else {
        next({ name: 'ForbiddenPage' })
      }
    } catch (error) {
      console.error('获取用户信息失败:', error)
      // 获取用户信息失败，可能是token过期或无效，清除token并跳转到登录页
      authStore.clearAuth()
      next({ name: 'login', query: { redirect: to.fullPath } })
    }
  })
}
